package demo10.composite.menuiterator;

import java.util.Iterator;
/**
 * 菜单组件
 * 为组合中的所有对象定义一个接口，不管是组合还是叶节点。
 * 
 * 给菜单和菜单项提供一个接口，以便他们能共同使用。
 * 组合是一个折中案例。看似违反类单一性原则
 * */
public abstract class MenuComponent {
	//这些方法用来操作菜单组件和菜单项组件。
	//因为有些方法只对菜单有效有些方法只对菜单项有意义，默认实现抛出UnsupportedOperationException（）异常
	//这样如果菜单或菜单项不支持默写方法，只需要实现默认方法就可以了。
	
	//“组合”方法，增加，删除，取得菜单组件。
	public void add(MenuComponent menuComponent) {
		throw new UnsupportedOperationException();
	}
	public void remove(MenuComponent menuComponent) {
		throw new UnsupportedOperationException();
	}
	public MenuComponent getChild(int i) {
		throw new UnsupportedOperationException();
	}
  
	//"操作方法"，被菜单项所使用。
	public String getName() {
		throw new UnsupportedOperationException();
	}
	public String getDescription() {
		throw new UnsupportedOperationException();
	}
	public double getPrice() {
		throw new UnsupportedOperationException();
	}
	public boolean isVegetarian() {
		throw new UnsupportedOperationException();
	}
//操作方法，被共同使用
	public abstract Iterator<MenuComponent> createIterator();
 
	public void print() {
		throw new UnsupportedOperationException();
	}

}
